The use of virtualization is increasingly common on personal computers. Virtualization is an important part of solutions relating to energy management, data security, hardening of applications against malware (software created for purpose of malfeasance), and the like.
One virtualization approach is to provide a small hypervisor which is tightly integrated to a few small and hardened application programs. A hypervisor may also host, but be only loosely connected to, an opaque O/S (Operating System) which is typically a complex and full-featured general purpose computer environment or O/S such as Microsoft® Windows® Vista® or a similar commercial product. An opaque O/S is an operating system for which the source code is unavailable to most users of it, typically because the O/S does not provide for Open Source. Thus it may also be referred to as a closed O/S.
By design, in some implementations, a hypervisor may support a single opaque O/S per operating session and virtualize its resources. The need to allow efficient non-virtualized access to some resources (typically by the opaque O/S) and yet virtualize and/or share other resources is desirable.
I/O device emulation is commonly used in hypervisor based systems such as the open source Xen® hypervisor. Use of emulation, including I/O emulation, can result in a substantial performance hit. On the other hand, it is desirable to emulate or virtualize the same devices or resources from time to time in response to changes in the prevailing operating conditions. For example, an Internet browser being used for an interactive user session may be a high-priority foreground task, whereas the same browser program might be considered a low-priority background activity while downloading a multi-megabyte sized file such as if it is time-shared with other interactivities.
Thus the need for pass-thru I/O as contrasted with emulated I/O may change within a single operating session and there is an advantage to reconciling the differing needs that thereby arise from time to time.